## Теория

- `setup.py`: https://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/creation.html
- `setup.py` template: https://github.com/kennethreitz/setup.py
- `pip`: https://pip.pypa.io/en/stable/
- `virtualenv`: https://docs.python.org/3/library/venv.html
- Зачем нужен `venv`? https://devman.org/qna/12/chto-takoe-virtualnoe-okruzhenie-zachem-ono-kakie-byvajut-analogi/
- Критика `pip`: https://news.ycombinator.com/item?id=6859371
- `poetry`: https://python-poetry.org и https://github.com/python-poetry/poetry

Бонус:
- `pyenv` - управляем версиями Python: https://github.com/pyenv/pyenv

Видео:
- История `pipenv`: https://www.youtube.com/watch?v=JNT1u3Ri3YY&list=PLtFn4-Uxnqyn2ZnJ8iaCBTvTzuMvnGQeb&index=8
- `pyenv` + `poetry`: https://www.youtube.com/watch?v=cyDeh4V0zIo
- Прощай `venv`? https://www.youtube.com/watch?v=L2OpzwloTDI

Потребуется для практики:
- https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html
- https://python-poetry.org/docs/pyproject/#scripts


## Практика

Наша задача: разработать консольную утилиту, которая будет работать с текстом пользователя.

Наша команда должна называться `my-awesome-script`.

Доступно несколько команд:

1. Подсветка синтаксиса. Мы вводим `my-awesome-script highligh 'print(True)'`. В консоль выводится подсвеченный синтакс `print(True)`. Для подсветки синтаксиса необходимо воспользоваться библиотекой `pygments`. Документация: https://pygments.org/docs/quickstart/#options Работаем только с Python кодом.

Пример кода для подсветки:

```python
from pygments import highlight
from pygments.formatters import TerminalFormatter
from pygments.lexers import PythonLexer

code = highlight(...)
```

2. Шуточное обрамление текста. Мы вводим `my-awesome-script cowsay 'Some text'`. В консоль выводится что-то вроде:

```
 ___________
< Some text >
 -----------
     \   ^__^
      \  (oo)\_______
         (__)\       )\/\
           ||----w |
           ||     ||
```

Документация: https://github.com/jeffbuttars/cowpy
Можно использовать любую другую похожую зависимость.
И любых других персонажей.

3. Показ времени в выбранном часовом поясе. Например, команда `my-awesome-scipt time Europe/Moscow` выведет текущее время в Москве. А `my-awesome-scipt time Asia/Irkutsk` выведет текущее время в Иркустке.

Для работы с часовыми поясами необходимо использовать библиотеку `pytz`: http://pytz.sourceforge.net/

4. Вывод помощи. Необходимо, чтобы `my-awesome-script --help` показывал весь список доступных команды и их параментров

Технические требования:

1. Необходимо использовать `poetry` для работы с зависмостями
2. Необходимо использовать свой скрипт как **именно** скрипт, см `console_scripts`
3. Необходимо проверить безопасность своих пакетов при помощи `safety`, сам `safety` должен быть установлен как `dev-dependency`
4. Для обработки команд и параметров необходимо использовать `argparse`

### Дополнительные требования

Если есть возможность и желание,
можете дополнительно установить `wemake-python-styleguide`
как `dev-dependency`:
- https://pypi.org/project/wemake-python-styleguide
- https://github.com/wemake-services/wemake-python-styleguide

Документация: https://wemake-python-styleguide.readthedocs.io/en/latest/
Конфигурацию можно взять здесь: https://gist.github.com/sobolevn/3c07a6abfcc440d79a2ef76274b2d18e

Поправьте все ошибки, которые найдет данный инструмент.
